// 统一封装接口方法
// 每个方法负责请求一个url地址
// 逻辑页面, 导入这个接口方法, 就能发请求咯
// 好处: 请求url路径, 可以在这里统一管理
import axios from '@/utils/request'
import { getToken } from '@/utils/token'
// 登录-登录接口
// axios内部，会把参数对象转成json字符串格式发后台
// axios内部，会自动携带请求参数（headers）里Content-Type: 'application/json'帮忙添加好
export const loginAPI = ({ mobile, code }) => axios({
  url: '/v1_0/authorizations',
  method: 'POST',
  data: {
    mobile,
    code
  }
})
// 用户 - 关注用户
export const userFollowedAPI = ({ userId }) => axios({
  url: '/v1_0/user/followings',
  method: 'POST',
  data: {
    target: userId
  }
})
// 用户 - 取消关注
export const userUnFollowedAPI = ({ userId }) => axios({
  url: `/v1_0/user/followings/${userId}`,
  method: 'DELETE'
})
// 用户 - 获取基本信息（我的页面显示数据）
export const getUserInfoAPI = () => axios({
  url: '/v1_0/user'
})
// 用户 - 获取个人信息资料（编辑页面使用）
export const userProfileAPI = () => axios({
  url: '/v1_0/user/profile'
})
// 用户 - 更新头像
export const updateUserPhotoAPI = (fd) => axios({
  url: '/v1_0/user/photo',
  method: 'PATCH',
  data: fd// fd外面一会儿传进来的new FormData()表单对象
})
// 用户 - 更新基本资料
// 判断,有值才带参数名给后台，无值参数名不携带
// 写法1:解构赋值，4个判断，往空对象上添加有值的加上去(以前做过)
// 写法2:外面想传几对象key+value，就直接传入交给后台
// 写法3:上面写法不够语义化，我看不出obj里有什么
export const updateUserProfileAPI = (dataObj) => {
  const obj = {
    name: '',
    gender: 0,
    birthday: '',
    real_name: '',
    intro: ''
  }
  for (const key in obj) { // 遍历参数对象里每个key
    if (dataObj[key] === undefined) { // 用key去外面传入的参数对象匹配，如果没有找到(证明外面没传这个参数)
      delete obj[key]// 从obj身上移除这对属性和值
    } else {
      obj[key] = dataObj[key]// 如果使用了，就从外面对象取出对应key值，保存到obj上
    }
  }
  return axios({
    url: '/v1_0/user/profile',
    method: 'PATCH', // 局部更新->PUT(全都更新)
    data: obj// data不会忽略值为null的那对key+value, params遇到null值会忽略不携带此对参数和值给后台
  })
}
// 用户 - 刷新token
// export const getNewTokenAPI = () => request({
//   url: '/v1_0/authorizations',
//   method: 'PUT',
//   headers: {
//     // 请求拦截器统一携带的是token，而这次请求需要带的是refresh_token
//     // 所以在axios请求拦截器里判断，就是为了这种情况准备的
//     Authorization: 'Bearer ' + localStorage.getItem('refresh_token')
//   }
// })
// 频道-获取所有频道
export const getAllChannelsAPI = () => axios({
  url: '/v1_0/channels',
  method: 'GET'
})
// 频道-获取用户频道
export const getUserChannelsAPI = () => axios({
  url: '/v1_0/user/channels',
  headers: {
    Authorization: `Bearer ${getToken()}`
  }
})
// 频道-更新覆盖频道
export const updateChannelsAPI = ({ channels }) => axios({
  url: '/v1_0/user/channels',
  method: 'PUT',
  data: {
    channels // 用户已选整个频道数组
  }
})
// 频道-删除用户指定频道
export const deleteChannelAPI = ({ channelId }) => axios({
  url: `/v1_0/user/channels/${channelId}`,
  method: 'DELETE'
})
// 文章-获取列表
export const getAllArticleList = ({ channel_id, timestamp }) => axios({
  url: '/v1_0/articles',
  method: 'GET',
  params: { // 这里的参数，axios会帮你拼接在URL？后面（查询字符串）
    channel_id,
    timestamp
  }
})
// 文章 - 反馈 - 不感兴趣
export const dislikeArticleAPI = ({ artId }) => axios({
  url: '/v1_0/article/dislikes',
  method: 'POST',
  data: {
    target: artId
  }
})
// 文章 - 反馈 - 反馈垃圾内容reportArticleAPI
export const reportArticleAPI = ({ artId, type }) => axios({
  url: '/v1_0/article/reports',
  method: 'POST',
  data: {
    target: artId,
    type: type,
    remark: '待补充······'
  }
})
// 文章 - 获取详情
export const detailAPI = ({ artId }) => axios({
  url: `/v1_0/articles/${artId}`,
  method: 'GET'
})
// 文章 - 点赞
export const likeAPI = ({ artId }) => axios({
  url: '/v1_0/article/likings',
  method: 'POST',
  data: {
    target: artId
  }
})
// 文章 - 取消点赞
export const unlikeAPI = ({ artId }) => axios({
  url: `/v1_0/article/likings/${artId}`,
  method: 'DELETE'
})
// 文章 - 获取 - 评论列表
export const commentsListAPI = ({ id, offset = null, limit = 10 }) => axios({
  baseURL: 'http://toutiao.itheima.net',
  url: '/v1_0/comments',
  method: 'GET',
  params: {
    type: 'a',
    source: id,
    offset,
    limit
  }
})
// 文章 - 评论 - 喜欢
export const commentsLikingAPI = ({ commentId }) => axios({
  url: '/v1_0/comment/likings',
  method: 'POST',
  data: {
    target: commentId
  }
})
// 文章 - 评论 - 取消喜欢
export const commentsDislikingAPI = ({ commentId }) => axios({
  url: `/v1_0/comment/likings/${commentId}`,
  method: 'DELETE'
})
// 文章 - 评论发布
export const commentsSendAPI = ({ id, content, art_id = null }) => {
  const obj = {
    target: id,
    content
  }
  if (art_id !== null) {
    obj.art_id = art_id
  }
  return axios({
    url: '/v1_0/comments',
    method: 'POST',
    data: obj
  })
}
// 搜索 - 获取联想建议菜单列表
export const suggestListAPI = ({ keywords }) => axios({
  url: '/v1_0/suggestion',
  method: 'GET',
  params: {
    q: keywords
  }
})
// 搜索 - 搜索结果列表
export const searchResultAPI = ({ page = 1, per_page = 10, q }) => axios({
  url: '/v1_0/search',
  method: 'GET',
  params: {
    page,
    per_page,
    q
  }
})
